﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
namespace RS.Echarts.Models
{

    /// <summary>
    /// 表示选择器按钮的文本标签样式配置类。
    /// </summary>
    public class SelectorLabelStyle
    {
        /// <summary>
        /// 是否显示文本标签，默认为`true`，表示显示该文本标签。若设置为`false`，则对应的文本标签将不显示。
        /// </summary>
        public bool Show { get; set; } = true;

        /// <summary>
        /// 文本标签的颜色，用于设置文本标签中文字的颜色。
        /// 支持多种常见的颜色表示方式，例如十六进制颜色码（像`"#FF0000"`表示红色）、RGB函数表示（如`"rgb(255, 0, 0)"`）、RGBA函数表示（如`"rgba(255, 0, 0, 0.5)"`）等。
        /// </summary>
        public Color Color { get; set; } = Color.Black;

        /// <summary>
        /// 文本标签的字体风格，可选值为`"normal"`（正常风格，即常规字体样式）、`"italic"`（斜体风格）、`"oblique"`（倾斜风格），用于设置文字呈现的风格样式。
        /// </summary>
        public string FontStyle { get; set; } = "normal";

        /// <summary>
        /// 文本标签的字体粗细，可选值有`"normal"`（正常粗细）、`"bold"`（加粗）、`"bolder"`（更粗）、`"lighter"`（更细），也可以指定具体的数值（如`100`、`200`等按照字体粗细标准对应的数值），用于控制文字的粗细程度。
        /// </summary>
        public string FontWeight { get; set; } = "normal";

        /// <summary>
        /// 文本标签的字体系列，例如`"sans-serif"`（无衬线字体系列）、`"serif"`（衬线字体系列）、`"monospace"`（等宽字体系列）、`"Arial"`、`"Courier New"`、`"Microsoft YaHei"`等具体的字体类型，用于确定文字使用的字体家族。
        /// </summary>
        public string FontFamily { get; set; } = "sans-serif";

        /// <summary>
        /// 文本标签的字体大小，单位为像素，用于设置文字的大小尺寸。例如设置为`12`表示文字的字号大小为12像素。
        /// </summary>
        public int FontSize { get; set; } = 12;

        /// <summary>
        /// 文本标签的行高，单位为像素，它决定了文本行与行之间的垂直间距，有助于调整文本的排版布局，使文本显示更整齐美观。例如设置为`20`，意味着每行文本之间的垂直间距为20像素。
        /// </summary>
        public int LineHeight { get; set; }

        /// <summary>
        /// 文本标签的水平对齐方式，可选值为`"left"`（左对齐）、`"right"`（右对齐）、`"center"`（居中对齐），用于控制文本在水平方向上相对于其容器或者相关元素的对齐方式。
        /// </summary>
        public string Align { get; set; } = "left";

        /// <summary>
        /// 文本标签的垂直对齐方式，可选值为`"top"`（顶部对齐）、`"middle"`（中部对齐，即垂直居中对齐）、`"bottom"`（底部对齐），用于设定文本在垂直方向上相对于其容器或者相关元素的对齐方式。
        /// </summary>
        public string VerticalAlign { get; set; } = "middle";

        /// <summary>
        /// 文本标签的背景色，用于设置文本标签的背景颜色，同样支持如十六进制颜色码、RGB、RGBA等多种颜色表示形式，可用于突出显示文本标签或者使其与背景形成对比等。
        /// </summary>
        public Color BackgroundColor { get; set; } = Color.Transparent;

        /// <summary>
        /// 文本标签的边框颜色，用于设置文本标签边框的颜色，可通过相应颜色表示方式来指定，例如`"#000000"`可指定黑色边框，用于给文本标签添加边框装饰效果。
        /// </summary>
        public Color BorderColor { get; set; } = Color.Transparent;

        /// <summary>
        /// 文本标签的边框宽度，单位为像素，用于确定文本标签边框的粗细程度，例如设置为`1`表示边框宽度为1像素，设置更大的值则边框会更粗。
        /// </summary>
        public int BorderWidth { get; set; }

        /// <summary>
        /// 文本标签的边框类型，可选值为`"solid"`（实线）、`"dashed"`（虚线）、`"dotted"`（点线），用于定义文本标签边框线的样式，提供不同的视觉效果。
        /// </summary>
        public string BorderType { get; set; } = "solid";

        /// <summary>
        /// 文本标签边框虚线偏移量，在边框类型为`"dashed"`或`"dotted"`时生效，单位为像素，用于设置虚线或点线起始的偏移位置，可微调边框线的呈现效果。
        /// </summary>
        public int BorderDashOffset { get; set; }

        /// <summary>
        /// 文本标签的圆角半径，单位为像素，可以是单个数值（表示四个角的圆角半径相同），也可以是包含四个数值的数组（分别对应左上角、右上角、右下角、左下角的圆角半径），用于设置文本标签的圆角效果，使标签外观更圆润。
        /// 例如，设置为`5`表示四个角的圆角半径均为5像素；设置为`new int[]{5, 5, 0, 0}`则表示左上角和右上角的圆角半径为5像素，右下角和左下角为直角。
        /// </summary>
        public int[] BorderRadius { get; set; }

        /// <summary>
        /// 文本标签的内边距，单位为像素，可以是单个数值（表示四个方向的内边距相同），也可以是包含四个数值的数组（分别对应上、右、下、左四个方向的内边距），用于在文本标签内部内容与边框之间设置间隔空间，优化显示效果。
        /// 例如，设置为`5`表示上下左右四个方向的内边距均为5像素；设置为`new int[]{5, 10, 5, 10}`则表示上内边距为5像素、右内边距为10像素、下内边距为5像素、左内边距为10像素。
        /// </summary>
        public int[] Padding { get; set; }

        /// <summary>
        /// 文本标签阴影的模糊大小，单位为像素，用于设置文本标签阴影的模糊程度，数值越大阴影越模糊，与`ShadowColor`、`ShadowOffsetX`、`ShadowOffsetY`等属性配合使用，可营造出不同的阴影效果。
        /// </summary>
        public int ShadowBlur { get; set; }

        /// <summary>
        /// 文本标签阴影颜色，用于设置文本标签阴影的颜色，支持常见的颜色表示方式，且需注意此属性生效通常需要满足相应的显示条件（如文本标签本身显示等）。
        /// </summary>
        public Color ShadowColor { get; set; } = Color.Transparent;

        /// <summary>
        /// 文本标签阴影水平方向上的偏移距离，单位为像素，正值表示阴影向右偏移，负值表示向左偏移，用于控制阴影在水平方向上的位置，与其他阴影属性配合实现阴影效果的精准定位。
        /// </summary>
        public int ShadowOffsetX { get; set; }

        /// <summary>
        /// 文本标签阴影垂直方向上的偏移距离，单位为像素，正值表示阴影向下偏移，负值表示向上偏移，用于控制阴影在垂直方向上的位置，同样与其他阴影属性协同作用来呈现期望的阴影效果。
        /// </summary>
        public int ShadowOffsetY { get; set; }

        /// <summary>
        /// 文本标签的宽度，单位为像素，用于限定文本标签在水平方向上的最大尺寸大小，若文本内容超出此宽度，可能会根据其他相关配置（如`Overflow`属性）进行相应处理，比如换行或者截断等操作。
        /// </summary>
        public int Width { get; set; }

        /// <summary>
        /// 文本标签的高度，单位为像素，用于指定文本标签在垂直方向上的最大尺寸大小，当文本内容在垂直方向上超出此高度时，也会依据相关配置进行相应处理，例如截断显示等。
        /// </summary>
        public int Height { get; set; }

        /// <summary>
        /// 文本标签文字本身的描边颜色，用于设置文本标签中文字的描边颜色，支持常见的颜色表示方式，可使文字边缘呈现出特定颜色的描边效果，增强文字的视觉表现力。
        /// </summary>
        public Color TextBorderColor { get; set; } = Color.Transparent;

        /// <summary>
        /// 文本标签文字本身的描边宽度，单位为像素，用于确定文字描边的粗细程度，设置合适的值能让文字描边效果更明显，提升文字的视觉层次感。
        /// </summary>
        public int TextBorderWidth { get; set; }

        /// <summary>
        /// 文本标签文字本身的描边类型，可选值为`"solid"`（实线描边）、`"dashed"`（虚线描边）、`"dotted"`（点线描边），用于定义文字描边线条的样式，打造多样化的文字外观效果。
        /// </summary>
        public string TextBorderType { get; set; } = "solid";

        /// <summary>
        /// 文本标签文字本身的描边虚线偏移量，在文字描边类型为`"dashed"`或`"dotted"`时生效，单位为像素，用于设置虚线或点线描边起始的偏移位置，可进一步细化文字描边的呈现效果。
        /// </summary>
        public int TextBorderDashOffset { get; set; }

        /// <summary>
        /// 文本标签文字本身的阴影颜色，用于设置文本标签中文字自身阴影的颜色，支持常见的颜色表示方式，同样需注意生效条件（如文本标签显示等），能为文字营造出独特的阴影效果，增强立体感。
        /// </summary>
        public Color TextShadowColor { get; set; } = Color.Transparent;

        /// <summary>
        /// 文本标签文字本身的阴影模糊大小，单位为像素，用于设置文字自身阴影的模糊程度，配合`TextShadowOffsetX`、`TextShadowOffsetY`等属性来精确控制文字阴影效果，使其更具层次感和立体感。
        /// </summary>
        public int TextShadowBlur { get; set; }

        /// <summary>
        /// 文本标签文字本身的阴影水平方向上的偏移距离，单位为像素，正值表示阴影向右偏移，负值表示向左偏移，用于控制文字阴影在水平方向上的位置，与其他文字阴影属性共同作用来实现期望的文字阴影效果。
        /// </summary>
        public int TextShadowOffsetX { get; set; }

        /// <summary>
        /// 文本标签文字本身的阴影垂直方向上的偏移距离，单位为像素，正值表示阴影向下偏移，负值表示向上偏移，用于控制文字阴影在垂直方向上的位置，协同其他属性营造出合适的文字阴影外观。
        /// </summary>
        public int TextShadowOffsetY { get; set; }

        /// <summary>
        /// 文本标签文字超出宽度是否截断或者换行的处理方式，在配置了`Width`属性时生效，可选值为`"truncate"`（截断并显示`Ellipsis`配置的文本，通常用于末尾显示省略号等截断提示）、`"break"`（换行显示，使文字在宽度限制内换行排列）、`"breakAll"`（换行显示，且在英语等拉丁文中还会强制单词内换行），用于控制文本在宽度受限情况下的显示效果。
        /// </summary>
        public string Overflow { get; set; } = "none";

        /// <summary>
        /// 在`Overflow`属性配置为`"truncate"`时生效，用于配置末尾显示的文本，默认为`"..."`，即当文本截断时在末尾显示的省略号等提示内容，可根据需求自定义。
        /// </summary>
        public string Ellipsis { get; set; } = "...";

        /// <summary>
        /// 富文本样式自定义，以键值对的形式存储不同样式的文本配置，可针对文本标签内不同部分的文字设置各异的样式，比如不同的字体、颜色、大小等，实现更复杂、多样化的文本显示效果。
        /// 例如，可以通过设置不同的键（如`"title"`、`"subtitle"`等）对应不同的`TextStyle`实例来为文本标签中的不同部分文字定制样式。
        /// </summary>
        public Dictionary<string, TextStyle> Rich { get; set; } = new Dictionary<string, TextStyle>();
    }
}
